package com.openspring.framework.service;

import java.io.Serializable;
import java.util.List;

public interface GenericService<T, ID extends Serializable> {

	/**
	 * 新增实体
	 * @param entity 实体
	 */
	void create(T entity);
	
	/**
	 * 删除实体
	 * @param id 主键
	 */
	void remove(ID id);
	
	/**
	 * 批量删除实体
	 * @param ids 主键数组
	 */
	void remove(ID[] ids);
	
	/**
	 * 更新实体
	 * @param entity 实体
	 */
	void modify(T entity);
	
	/**
	 * 加载实体, 没有数据则返回null
	 * @param id 主键
	 * @return 实体
	 */
	T load(ID id);
	
	/**
	 * 以默认SQL查询全部实体
	 * @return 实体集合
	 */
	List<T> findAll();
	
	/**
	 * 以自定义SQL查询实体
	 * @param whereSql where语句
	 * @param values 值
	 * @return
	 */
	List<T> find(String sql, Object... values);
	
	/**
	 * 以默认SQL和Where条件查询实体
	 * @param whereSql where语句
	 * @param values 值
	 * @return
	 */
	List<T> findWhere(String whereSql, Object... values);
	
	/**
	 * 查询实体记录数
	 * @return 记录数
	 */
	int getTotalCount();
	
	/**
	 * 查询实体记录数
	 * @param whereSql 条件语句
	 * @param values 值
	 * @return 记录数
	 */
	int getTotalCount(String whereSql, Object... values);
}
